package me.zhengjie.server;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import me.zhengjie.dao.MaterialDao;
import me.zhengjie.dao.StoreLocalDao;
import me.zhengjie.dao.dto.StoreLocalQueryCriteria;
import me.zhengjie.utils.PageResult;
import me.zhengjie.vo.Result;
import me.zhengjie.vo.task.TaskViewQueryCriteria;
import me.zhengjie.vo.task.TaskViewVo;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

public interface StoreLocalService extends IService<StoreLocalDao> {


    /**
     * 查询数据分页
     * @param criteria 条件
     * @param page 分页参数
     * @return
     */
    PageResult<TaskViewVo> queryAllTaskStatusChange(TaskViewQueryCriteria criteria, Page<Object> page);

    /**
     * 查询数据分页
     *
     * @param criteria 条件
     * @param page     分页参数
     * @return PageResult
     */
    PageResult<StoreLocalDao> queryAll(StoreLocalQueryCriteria criteria, Page<Object> page);

    /**
     * 查询所有数据不分页
     *
     * @param criteria 条件参数
     * @return List<StoreLocalDto>
     */
    List<StoreLocalDao> queryAll(StoreLocalQueryCriteria criteria);

    /**
     * 创建
     *
     * @param resources /
     */
    void create(StoreLocalDao resources);

    /**
     * 编辑
     *
     * @param resources /
     */
    void update(StoreLocalDao resources);

    /**
     * 多选删除
     *
     * @param ids /
     */
    void deleteAll(List<String> ids);

    /**
     * 导出数据
     *
     * @param all      待导出的数据
     * @param response /
     * @throws IOException /
     */
    void download(List<StoreLocalDao> all, HttpServletResponse response) throws IOException;


    /**
     * 根据物料信息，分配储位
     *
     * @param materialDao 物料信息
     * @param floor       楼层
     * @return 储位编码
     */
    String findStoreByType(MaterialDao materialDao, String floor, String goodType);


    /**
     * 锁定储位
     *
     * @param ids 储位信息列表
     * @return true/false
     */
    Result<?> lockStore(List<String> ids);

    /**
     * 解锁储位
     *
     * @param ids 储位信息列表
     * @return true/false
     */
    Result unlockStore(List<String> ids);

    /**
     * 释放储位
     *
     * @param ids 储位信息列表
     * @return true/false
     */
    Result releaseStore(List<String> ids);



    Result<?> updateWareType(Map<String, Object> params);

    boolean updateData(StoreLocalDao storeLocalDao);

    boolean updateDataList(List<String> ids, StoreLocalDao storeLocalDao);

    StoreLocalDao findData(StoreLocalDao storeLocalDao);

    List<StoreLocalDao> findDataList(StoreLocalDao storeLocalDao);
}
